/**
 * API 错误处理工具函数
 * 统一提取后端返回的错误信息，便于页面展示与日志记录
 */

/**
 * 从错误对象中提取易读的错误文案
 * @param {unknown} error - 捕获到的错误对象，可能来自 fetch、Axios 或自定义 Error
 * @param {string} [fallback='操作失败'] - 当无法解析错误内容时的兜底提示
 * @returns {string} 可展示的错误提示文案
 */
export function extractErrorMessage(error, fallback = '操作失败') {
  if (!error) return fallback;

  if (typeof error === 'string') {
    return error;
  }

  if (error instanceof Error) {
    if (error.message) return error.message;
    if (error.cause && typeof error.cause === 'object') {
      const causeMessage = extractErrorMessage(error.cause);
      if (causeMessage) return causeMessage;
    }
  }

  if (typeof error === 'object') {
    if (error?.message && typeof error.message === 'string') {
      return error.message;
    }
    if (error?.error && typeof error.error === 'string') {
      return error.error;
    }
    if (
      error?.response?.data?.message &&
      typeof error.response.data.message === 'string'
    ) {
      return error.response.data.message;
    }
  }

  return fallback;
}

/**
 * 构造包含详细上下文的错误信息
 * @param {unknown} error - 原始错误对象
 * @returns {{ message: string, status?: number, details?: any }} 规范化结果
 */
export function normalizeApiError(error) {
  const message = extractErrorMessage(error);
  const status = typeof error?.status === 'number' ? error.status : undefined;
  const details =
    typeof error === 'object' && error !== null && 'body' in error
      ? error.body
      : undefined;

  return { message, status, details };
}


